package com.uacp.sgb.negocio.util;

import com.uacp.sgb.datos.dominio.entidades.TipoBien;
import com.uacp.sgb.datos.dominio.persistencia.dao.BienDao;
import com.uacp.sgb.datos.dominio.persistencia.dao.TipoBienDao;

public class UtilSBN 
{		
	public static String getUltimoSBNRegistrado(TipoBien tipoBien) 
	{
		String ultimoSBN = BienDao.getUltimoSBNRegistrado(tipoBien.getDescripcion());
		
		if(ultimoSBN == null)
		{
			return tipoBien.getCodigo() + "0000";
		}
		
		return ultimoSBN;		
	}

	public static String generarPrimerSBN(String descripcion) 
	{
		if(descripcion == null)
			throw new RuntimeException("GenerarPrimerSBN: Tipo de bien nulo");
		
		String codigoTipo = TipoBienDao.getTipoBien(descripcion).getCodigo();
		
		String codigoSBN = codigoTipo + "0001";
		
		return codigoSBN;
	}

	public static String generarSiguienteSBN(String codigoSBN) 
	{
		String codigoTipoBien = codigoSBN.substring(0,8);
		StringBuilder correlativo = new StringBuilder(codigoSBN.substring(8));
		
		boolean aumentar = true;
		int indice = 3;
		char caracter;
		
		while(aumentar)
		{
			caracter = correlativo.charAt(indice);
			caracter = siguienteCaracter(caracter);
			
			correlativo.replace(indice, indice + 1, caracter+"");
		
			if(caracter != '0')
				aumentar = false;
			else
				indice --;
		}
		
		return codigoTipoBien + correlativo;
	}
	
	private static char siguienteCaracter(char car)
	{
		int caracter = car;
		
		if((caracter >= '0' && caracter < '9') ||  
		   (caracter >= 'A' && caracter < 'Z'))
			caracter = caracter + 1;
		
		else if(caracter == '9')
			caracter = 'A';
		
		else if(caracter == 'Z')
			caracter = '0';
		
		return (char)caracter;
	}
}
